/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.eurotrader.validadores;

import javax.faces.application.FacesMessage;
import javax.faces.component.UIComponent;
import javax.faces.component.UIInput;
import javax.faces.context.FacesContext;
import javax.faces.validator.Validator;
import javax.faces.validator.ValidatorException;

/**
 *
 * @author Usuário
 */
public class ValidarIp implements Validator {

    public void validate(FacesContext context, UIComponent validate, Object value) throws ValidatorException {
        String faixa = (String) value;
        boolean reprovou = false;
        int indice = faixa.indexOf(".");
        int indice1 = faixa.indexOf(".", indice + 1);
        int indice2 = faixa.lastIndexOf(".");
        if ((indice != -1) && (indice1 != -1) && (indice2 != -1)) {
            if ((indice == indice1) || (indice == indice2) || (indice1 == indice2)) {
                reprovou = true;
            } else if (indice == 0) {
                reprovou = true;
            } else if (indice1 == indice + 1) {
                reprovou = true;
            } else if (indice2 == indice1 + 1) {
                reprovou = true;
            } else if (indice2 == faixa.length() - 1) {
                reprovou = true;
            }
        } else {
            reprovou = true;
        }
        if (!reprovou) {
            if (indice > 3) {
                reprovou = true;
            } else if (indice1 - indice > 4) {
                reprovou = true;
            } else if (indice2 - indice1 > 4) {
                reprovou = true;
            } else if ((faixa.length() - 1) - indice2 > 3) {
                reprovou = true;
            }
            if (Integer.parseInt(faixa.substring(0, indice)) > 255) {
                reprovou = true;
            } else if (Integer.parseInt(faixa.substring(indice + 1, indice1)) > 255) {
                reprovou = true;
            } else if (Integer.parseInt(faixa.substring(indice1 + 1, indice2)) > 255) {
                reprovou = true;
            } else if (Integer.parseInt(faixa.substring(indice2 + 1, faixa.length())) > 254) {
                reprovou = true;
            }
        }
        if (reprovou) {
            ((UIInput) validate).setValid(false);
            FacesMessage msg = new FacesMessage("Ip inválido");
            context.addMessage(validate.getClientId(context), msg);
        }
    }
}
